package br.com.mural.android.webservice;

import java.util.ArrayList;
import java.util.List;

import br.com.mural.android.entidades.QuestaoObjetiva;
import br.com.mural.android.entidades.QuestaoSubjetiva;
import br.com.mural.android.entidades.Questionario;
import br.com.mural.android.entidades.Turma;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;

public class QuestionarioRest {
	private String URL_WS = WebServiceMural.URL_WS + "questionario/";
	private String URL_WS_ = WebServiceMural.URL_WS + "questao/";

	public Questionario getQuestionario(int id) throws Exception {

		String[] resposta = new WebServiceMural().get(URL_WS + id);

		if (resposta[0].equals("200")) {
			Gson gson = new Gson();
			Questionario questionario = gson.fromJson(resposta[1], Questionario.class);
			return questionario;
		} else {
			throw new Exception(resposta[1]);
		}
	}

	public List<Questionario> getListaQuestionario() throws Exception {

		String[] resposta = new WebServiceMural().get(URL_WS + "allGSON");

		if (resposta[0].equals("200")) {
			Gson gson = new Gson();
			ArrayList<Questionario> listaQuestionario = new ArrayList<Questionario>();
			JsonParser parser = new JsonParser();
			JsonArray array = parser.parse(resposta[1]).getAsJsonArray();

			for (int i = 0; i < array.size(); i++) {
				listaQuestionario.add(gson.fromJson(array.get(i), Questionario.class));
			}
			return listaQuestionario;
		} else {
			throw new Exception(resposta[1]);
		}
	}
	
	public List<Questionario> getListaQuestionarioPorTurma(Turma turma) throws Exception {
		String[] resposta = new WebServiceMural().get(URL_WS + "turma/" +turma.getId());

		if (resposta[0].equals("200")) {
			Gson gson = new Gson();
			ArrayList<Questionario> listaQuestionario = new ArrayList<Questionario>();
			JsonParser parser = new JsonParser();
			JsonArray array = parser.parse(resposta[1]).getAsJsonArray();

			for (int i = 0; i < array.size(); i++) {
				listaQuestionario.add(gson.fromJson(array.get(i), Questionario.class));
			}
			return listaQuestionario;
		}else {
			throw new Exception(resposta[1]);
		}
	}
	
	public List<QuestaoObjetiva> getListaQuestoesObjetivasPorQuestionario(Questionario questionario) throws Exception {
		String[] resposta = new WebServiceMural().get(URL_WS_ + "objetivas/" +questionario.getId());

		if (resposta[0].equals("200")) {
			Gson gson = new Gson();
			List<QuestaoObjetiva> listaQuestao = new ArrayList<QuestaoObjetiva>();
			JsonParser parser = new JsonParser();
			JsonArray array = parser.parse(resposta[1]).getAsJsonArray();

			for (int i = 0; i < array.size(); i++) {
				listaQuestao.add(gson.fromJson(array.get(i), QuestaoObjetiva.class));
			}
			return listaQuestao;
		}else {
			throw new Exception(resposta[1]);
		}
	}
	
	public List<QuestaoSubjetiva> getListaQuestoesSubjetivasPorQuestionario(Questionario questionario) throws Exception {
		String[] resposta = new WebServiceMural().get(URL_WS_ + "subjetivas/" +questionario.getId());

		if (resposta[0].equals("200")) {
			Gson gson = new Gson();
			List<QuestaoSubjetiva> listaQuestao = new ArrayList<QuestaoSubjetiva>();
			JsonParser parser = new JsonParser();
			JsonArray array = parser.parse(resposta[1]).getAsJsonArray();

			for (int i = 0; i < array.size(); i++) {
				listaQuestao.add(gson.fromJson(array.get(i), QuestaoSubjetiva.class));
			}
			return listaQuestao;
		}else {
			throw new Exception(resposta[1]);
		}
	}

	public String inserirQuestionario(Questionario questionario) throws Exception {

		Gson gson = new Gson();
		String questionarioJSON = gson.toJson(questionario);
		System.out.println("Questionario JSON: " + questionarioJSON);
		String[] resposta = new WebServiceMural().post(URL_WS + "inserir", questionarioJSON);

		if (resposta[0].equals("200")) {
			return resposta[1];
		} else {
			throw new Exception(resposta[1]);
		}
	}

	public String deletarQuestionario(int id) {
		String[] resposta = new WebServiceMural().get(URL_WS + "delete/" + id);
		return resposta[1];
	}

}
